package com.samcai.swiperecyclerview.imp;

import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.samcai.swiperecyclerview.listener.OnItemClickListener;
import com.samcai.swiperecyclerview.listener.OnItemLongClickListener;
import com.samcai.swiperecyclerview.listener.OnItemScrollLeftListener;
import com.samcai.swiperecyclerview.listener.OnItemScrollRightListener;
import com.samcai.swiperecyclerview.listener.OnItemSelectedListener;
import com.samcai.swiperecyclerview.listener.OnLoadInRecyclerListener;
import com.samcai.swiperecyclerview.listener.OnSubItemClickListener;
import com.samcai.swiperecyclerview.listener.OnSwipeRefreshListener;
import com.samcai.swiperecyclerview.view.LoaderView;


/**
 * RecyclerView功能接口
 * 
 * @author samcai-work
 * @time 2016年1月25日下午7:13:10
 * @version 1.0
 * @describe [nothing]
 */
public interface RecyclerViewImp {

	/**
	 * 设置Adapter同时传递监听事件
	 * 
	 * @time 2016年1月25日下午7:33:30
	 * @param adapter
	 */
	void setAdapter(RecyclerView.Adapter<?> adapter);

	/**
	 * 设置Item点击监听，必须要Adapter非NULL
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param listener
	 */
	void setOnItemClickListener(OnItemClickListener listener);

	/**
	 * 设置Item长按监听，必须要Adapter非NULL
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param listener
	 */
	void setOnItemLongClickListener(OnItemLongClickListener listener);

	/**
	 * 设置Item选中监听，必须要Adapter非NULL
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param listener
	 */
	void setOnItemSelectedListener(OnItemSelectedListener listener);

	/**
	 * 设置ItemView左划监听事件
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param srListener
	 * @param listener
	 */
	void setOnItemLeftScrollListener(OnSwipeRefreshListener srListener, OnItemScrollLeftListener listener);

	/**
	 * 设置ItemView右划监听事件
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param srListener
	 * @param listener
	 */
	void setOnItemRightScrollListener(OnSwipeRefreshListener srListener, OnItemScrollRightListener listener);

	/**
	 * 设置ItemView子view点击监听事件
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param id
	 */
	void setOnSubItemClickListener(int subViewId, OnSubItemClickListener listener);

	/**
	 * 设置RecyclerView划到底部加载更多的监听事件
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param listener
	 */
	void setOnLoadListener(OnLoadInRecyclerListener listener);

	/**
	 * 获取HeaderView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @return
	 */
	View getHeaderView();

	/**
	 * 获取FooterView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @return
	 */
	View getFooterView();

	/**
	 * 获取加载状态ItemView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @return
	 */
	LoaderView getLoadStateView();

	/**
	 * 移除HeaderView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param headerView
	 */
	void removeHeaderView(View headerView);

	/**
	 * 移除FooterView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param headerView
	 */
	void removeFooterView(View footerView);

	/**
	 * 设置HeaderView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param headerView
	 */
	void setHeaderView(View headerView);

	/**
	 * 设置FooterView
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param footerView
	 */
	void setFooterView(View footerView);

	/**
	 * 设置分割线
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param color
	 *            分割线颜色
	 * @param size
	 *            分割线大小
	 * @param leftMargin
	 *            左边距
	 * @param rightMargin
	 *            右边距
	 */
	void setItemDecoration(int color, int size, int leftMargin, int rightMargin);

	/**
	 * 设置触发OnLoadMore时是否自动刷新
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param autoLoadMore
	 * @return
	 */
	void setAutoLoadMoreEnable(boolean autoLoadMore);

	/**
	 * 加载开始提示文字
	 * 
	 * @time 2016年1月25日下午7:07:37
	 * @param loadNoMoreText
	 */
	void setLoadStartText(String loadStartText);

	/**
	 * 加载成功提示文字
	 * 
	 * @time 2016年1月25日下午7:07:10
	 * @param loadSucceedText
	 */
	void setLoadSucceedText(String loadSucceedText);

	/**
	 * 加载失败提示文字
	 * 
	 * @time 2016年1月25日下午7:07:23
	 * @param loadFailedText
	 */
	void setLoadFailedText(String loadFailedText);

	/**
	 * 加载没有更多数据提示文字
	 * 
	 * @time 2016年1月25日下午7:07:37
	 * @param loadNoMoreText
	 */
	void setLoadNoMoreText(String loadNoMoreText);

	/**
	 * 数据更新完成后通知RecyclerView刷新完成
	 * 
	 * @time 2016年1月25日下午7:08:08
	 */
	void succeed();

	/**
	 * 通知RecyclerView数据加载失败
	 * 
	 * @time 2016年1月25日下午7:07:57
	 */
	void failed();

	/**
	 * 通知RecyclerView已无数据可以加载
	 * 
	 * @time 2016年1月25日下午7:10:15
	 */
	void noMore();

}
